package model

import (
	"time"

	"gorm.io/gorm"
)

// 用户结构
type Users struct {
	gorm.Model
	Name   string
	Type   bool `gorm:"type:boolean;default false"`  // false 员工 true 管理员
	status bool `gorm:"status:boolean;default true"` // true 上班 false 下班
}

// 模型结构
type News struct {
	gorm.Model
	Title    string
	Content  string
	Userid   int
	Type     bool `gorm:"type:boolean;default 0"` // true 已审核
	Audit_id int  // 审核员id
}

// 用户表
type User struct {
	gorm.Model
	Name           string `gorm:"type:varchar(20);not null"`
	Mobile         string `gorm:"varchar(11);not null;unique"`
	Password       string `gorm:"size:255;not null"`
	Tscore         int
	Tmoney         float32
	BeoverdueMoney float32 //逾期金额

}

// 三方登录表
type SfLogin struct {
	gorm.Model
	Uid int
	// User     User   `gorm:"constraint:OnUpdate:CASECADE,ONDelete:SET NULL;"`
	Token    string `gorm:"varchar(100);not null;"`
	PlatForm string `gorm:"size:10;not null"`
}

// 开户表
type OpenBank struct {
	gorm.Model
	Name       string `gorm:"type:varchar(20);not null"`
	CardNumber string `gorm:"varchar(50);not null;unique"`
	CardUrl    string `gorm:"size:100;not null"`
	BankCode   string `gorm:"size:50;"` //身份证号
	Mobile     string `gorm:"size:11;"`
	Password   uint   //交易密码
	Userid     uint
}

// 充值表
type Recharge struct {
	gorm.Model
	Userid uint
	Money  uint
	Status uint //1成功  2失败
	Type   uint //1支付宝 2微信
}

// 标地表
type TargetLand struct {
	gorm.Model
	Code            string `gorm:"size:20;"`
	Userid          uint
	Money           uint
	Used            string `gorm:"size:255;"` //用途
	Days            uint
	InterestRate    float32   //利率（按金额）
	Status          uint      //1新建  2进行中  3满标  4放款  5已经完成 6逾期 7逾期已还
	RemainingAmount uint      //剩余金额
	EndTime         time.Time //到期时间
	Commission      float32   //佣金
}

// 投资表
type Bid struct {
	gorm.Model
	Code            string `gorm:"size:20;"`
	Userid          uint
	Money           uint
	Status          uint //1新建  2进行中  3满标  4放款  5已经完成
	RemainingAmount uint //剩余金额
}

// 投资记录表
type TargetlandBid struct {
	gorm.Model
	TargetLand string `gorm:"size:20;"` //借款id
	Bid        string `gorm:"size:20;"` //投资id
	Money      uint   //金额
	Status     uint   //1进行中 2成功  3失败
}

// 审核记录表
type Audit struct {
	gorm.Model
	AuditId    uint
	AuditName  string `gorm:"size:20;"`
	Type       uint   //1标地  2满标
	TargetLand string `gorm:"size:20;"`
	Status     uint   //1通过  2失败
}

// 放款记录表
type SendMoney struct {
	gorm.Model
	TargetLandId  string `gorm:"size:20;"` //标地id
	TargetlandBid uint   //标地记录表id
	TargetId      uint   //借款人
	TargetBank    string `gorm:"size:20;"` //借款人账户
	Bid           uint   //出借人
	BidBank       string `gorm:"size:20;"` //出借人账户
}

// 还款记录表
type RepaymentRecord struct {
	gorm.Model
	TargetLandId  string `gorm:"size:20;"` //标地id
	TargetlandBid uint   //标地记录表id
	TargetId      uint   //借款人
	TargetBank    string `gorm:"size:20;"` //借款人账户
	Bid           uint   //出借人
	BidBank       string `gorm:"size:20;"` //出借人账户
}

// 账号变更记录表
type BankChangeRecord struct {
	gorm.Model
	Userid       int
	Money        float32 //正的是加，负的是减
	Tmoney       float32 //余额
	Descriptions string  `gorm:"type:varchar(255);"`
}

// 提现记录表
type Withdraw struct {
	gorm.Model
	Userid uint
	Money  float32
	Status uint //1成功  2失败
}

// 管理员表
type AdminUser struct {
	gorm.Model
	Name     string `gorm:"type:varchar(20);not null"`
	Mobile   string `gorm:"varchar(11);not null;unique"`
	Password string `gorm:"size:255;not null"`
	Roleid   int
}

// 角色表
type Role struct {
	gorm.Model
	Name                string `gorm:"type:varchar(20);not null"`
	PagePermistion      uint   //资源的二进制转十进制
	InterfacePermistion uint   //资源的二进制转十进制
}

// 资源表
type Resource struct {
	gorm.Model
	Name       string `gorm:"type:varchar(20);not null"`
	Permistion uint   //资源的二进制转十进制
	Type       uint   //1页面资源  2接口资源
}

// 逾期记录表
type Beoverdue struct {
	TargetLandId  string `gorm:"size:20;"` //标地id
	TargetlandBid uint   //标地记录表id
	TargetId      uint   //借款人
	TargetName    string `gorm:"size:20;"` //借款人姓名
	BidId         uint   //出借人
	BidIdName     string `gorm:"size:20;"` //出借人姓名
	Money         uint   //逾期金额
	Days          uint   //逾期天数
}

// 逾期历史记录表
type BeoverdueHistory struct {
	TargetLandId  string `gorm:"size:20;"` //标地id
	TargetlandBid uint   //标地记录表id
	TargetId      uint   //借款人
	TargetName    string `gorm:"size:20;"` //借款人姓名
	BidId         uint   //出借人
	BidIdName     string `gorm:"size:20;"` //出借人姓名
	Money         uint   //逾期金额
	Days          uint   //逾期天数
}

//焦点图表
//积分表
//评价表
//关注表
//公告表
//消息记录表

func CreateTable() {
	// var db *gorm.DB
	db := GetDb()
	db.AutoMigrate(&User{}, &SfLogin{}, &OpenBank{}, &Recharge{},
		&TargetLand{}, &Bid{}, &TargetlandBid{}, &Audit{}, &SendMoney{}, &RepaymentRecord{},
		&BankChangeRecord{}, &Withdraw{}, &AdminUser{}, &Role{}, &Resource{}, &Beoverdue{})
}
